Computer systems have long relied on network connections to transfer data, whether from one computer system to another computer system, one computer component to another computer component, or from one processor to another processor in the same computer. Most computer networks link multiple computerized elements to one another, and include various functions such as verification that a message sent over the network arrived at the intended recipient, confirmation of the integrity of the message, and a method of routing a message to the intended recipient on the network.
These and other basic network functions are used to ensure that a message sent via a computerized network reaches the intended recipient intact and unaltered. When networks become noisy or when a network connection is faulty, network messages can be lost and not reach the intended destination. This is commonly due to physical factors like electrical noise, poor connections, broken or damaged wires, impedance mismatches between network components, and other such factors.
Similarly, when networks are congested, messages may not be forwarded through the network efficiently and reach the intended destination in a timely manner or in the order sent. Various problems such as broken routing links, deadlocks, livelocks, and message prioritization can result in some messages being delayed, rerouted, or in extreme cases failing to arrive at the intended destination altogether.
For these and other reasons, many computerized networks implement various forms of flow control, such as requiring acknowledgment that a first packet or message in a sequence of packets or messages has been received by the intended recipient before sending the second packet or message. In a more sophisticated example, the message sender restricts the number of packets or messages that can be transmitted before the sender receives acknowledgment of receipt from the intended recipient. This method provides confirmation of message delivery, but provides improved network throughput over the previous sequential packet method.
It is therefore desired to provide fast, reliable, and efficient messaging between elements in a computerized network.